# -*- coding: utf-8 -*-
__author__ = 'lztkdr'
__date__ = '2020/3/31 9:51'

import numpy as np

t1 = np.arange(12).reshape((3, 4))
print(t1)
print("=============================================")
print(t1.dtype)
t1[1:, 2:] = np.nan
print(t1)
print("=============================================")
t1 = np.arange(12).reshape((3, 4))
# ValueError: cannot convert float NaN to integer
# t1[0,0]= np.nan
# 只有浮点型 可以直接 设置 某个位置的值 为 NaN
t1 = t1.astype(float)
t1[0, 0] = np.nan
print(t1)
print("=============================================")
# 以下实例获取数组中(0,0)，(1,1)和(2,0)位置处的元素。
x = np.array([[1, 2], [3, 4], [5, 6]])
y = x[[0, 1, 2], [0, 1, 0]]
print(y)
print("=============================================")
# 数组拼接
a1 = np.arange(1, 11).reshape(2, 5)
print(a1)
a2 = np.arange(11, 21).reshape(2, 5)
print(a2)
print("=======================")
print("水平拼接：\n", np.hstack((a1, a2)))
print("=======================")
print("垂直拼接：\n", np.vstack((a1, a2)))
print("=============================================")
"""
获取最大值最小值的【位置】
  np.argmax(t,axis=0)
  np.argmin(t,axis=1)
创建一个全0的数组: np.zeros((3,4))
创建一个全1的数组:np.ones((3,4))
创建一个对角线为1的正方形数组(方阵)： np.eye(3)

numpy的注意点copy:
	a=b 完全不复制，a和b相互影响（浅复制）
	a = b[:],视图的操作，一种切片，会创建新的对象a，但是a的数据完全由b保管，他们两个的数据变化是一致的，（浅复制）
	a = b.copy(),复制，a和b互不影响（深度拷贝）
"""
# 随机生成 3行4列 2维 数组 0-1的小数
a = np.random.rand(3, 4)
print(a)
print("=======================")
# 随机生成 3行4列 2维 数组  1=10 的int数字
a1 = np.random.randint(1, 10, (3, 4))
print(a1)
print("=============================================")
# 生成 4*4 维度的数据，数值在 4-10 之间
t = np.random.randint(4, 10, (4, 4)).astype(float)
print(t)
print("=======================")
t[t == 7] = np.nan
print(t)
print("=======================")
#判断一个值是否是 nan 要用 np.isnan(value)
# 利用 np.nan!=np.nan 原理
print(t != t)  # 为 True 的都是 np.nan
print(t[t != t])
# 获取 nan 的个数
print(np.count_nonzero(t != t))
print(np.count_nonzero(np.isnan(t)))
# 替换nan 的 -1
np.where(np.isnan(t),-1,t)

print("==============================================")


def fill_ndarray(t1):
	"""
	将 nan 填充为 均值
	:param t1: 
	:return: 
	"""""
	for i in range(t1.shape[1]):  # 遍历每一列
		temp_col = t1[:, i]  # 当前的一列
		nan_num = np.count_nonzero(temp_col != temp_col)
		if nan_num != 0:  # 不为0，说明当前这一列中有nan
			temp_not_nan_col = temp_col[temp_col == temp_col]  # 当前一列不为nan的array
			# 选中当前为nan的位置，把值赋值为不为nan的均值
			temp_col[np.isnan(temp_col)] = temp_not_nan_col.mean()
	return t1


t1 = np.arange(24).reshape((4, 6)).astype("float")
t1[1, 2:] = np.nan
print(t1)
print("=======================")
t1 = fill_ndarray(t1)
print(t1)